"""
在 Python 中，使用了 yield 的函数被称为生成器（generator）。

跟普通函数不同的是，生成器是一个返回迭代器的函数，只能用于迭代操作，更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中，每次遇到 yield 时函数会暂停并保存当前所有的运行信息，返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数，返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列：
"""
import sys


def fibonacci(n):
	"""
		生成器函数-返回菲波那切数列迭代器

	:param n:迭代的次数
	:return: 菲波那切数列迭代器
	"""
	a, b, count = 0, 1, 0
	while True:
		# 每10个数字一行
		if count % 10 == 0:
			print()
		# 超过次数，返回
		if count > n:
			return
		# 暂停并保存a
		yield a
		a, b = b, a + b
		count += 1


it = fibonacci(200)  # 由生成器返回生成的一个迭代器

while True:
	try:
		print(next(it), end="    ")
	except StopIteration:
		sys.exit()
